home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 44
/
Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso
/
Aminet
/
util
/
wb
/
VisualPrefs_PT.lha
/
VisualPrefs_PT
/
VP-Developer_PT.doc
< prev
next >
Wrap
Text File
|
2001-04-19
|
7KB
|
154 lines
Apresentando
O INTERFACE DO VISUALPREFS PARA PROGRAMADORES
Um trabalho em curso
Se é um programador, pode aproveitar algumas das características do VisualPrefs.
Embora não exista ainda um API completo para o VisualPrefs, já é possível
utilizar as classes BOOPSI que o VisualPrefs adiciona ao sistema.
O objectivo dessas classes é permitir ao programador obter facilmente um
"visual" à VisualPrefs sem ter que esperar que eu implemente um 'patch'
para a sua aplicação. ;-)
Actualmente existe apenas uma classe:
"tbiclass" - a classe da barra de título
Esta classe proporciona na barra de título das suas janelas as imagens
mais comuns dos botões criados pelas aplicações. Exemplos disto são o botão
de iconificação ou o botão "padlock" do DirOpus5.
Todos os programas que usem esta classe obterão o mesmo aspecto para os botões
da barra de título se o VisualPrefs estiver a correr, o que provavelmente é
melhor do que ter diversas versões da mesma imagem...
Pode usar a "tbiclass" como "sysiclass"; são ambas sub-classes da "imageclass".
Uma imagem para a "tbiclass" pode ser criada chamando a função NewObject() com
os seguintes parâmetros:
SYSIA_DrawInfo - Isto é absolutamente obrigatório. TEM que passar um ponteiro
DrawInfo para a "tbiclass" ou a função NewObject() falhará.
SYSIA_Which - Para especificar a imagem que pretende; actualmente existem seis
tipos de imagem:
POPUPIMAGE - Imagem do botão 'pop-up' do MUI na barra de título.
MUIIMAGE - Imagem do botão de configuração do MUI na barra de título.
SNAPSHOTIMAGE - Imagem do botão do MUI na barra de título que permite
gravar a posição da janela.
ICONIFYIMAGE - Imagem de botão de iconificação na barra de título.
PADLOCKIMAGE - Imagem do tipo de botão "padlock" do DirOpus.
TBFRAMEIMAGE - Uma imagem de botão de barra de título vazia para
efeitos gerais.
IA_Width, IA_Height - Estes só são reconhecidos pelo tipo TBFRAMEIMAGE;
os restantes tipos de imagem ignoram-nos e têm sempre
o mesmo tamanho da imagem do botão de troca de janelas.
SYSIA_ReferenceFont - Este só é reconhecido pelo tipo TBFRAMEIMAGE;
os restantes tipos de imagem ignoram-no e tem sempre
a mesma altura da imagem do botão de troca de janelas.
TBIA_FullFrame - Este parâmetro, disponível a partir do VisualPrefs 41.38, só
é reconhecido pelo tipo TBFRAMEIMAGE. Tem duas definições:
TRUE e FALSE. Use TRUE para dar à imagem uma moldura interior,
caso o estilo actual suporte molduras interiores. É aconselhável
usar esta definição quando o conteúdo da imagem é gráfico. Use
FALSE para dar à imagem uma moldura exterior, o que é recomendável
se a imagem contiver texto (já que que uma moldura interior
poderia criar um espaço demasiado pequeno para esse texto). A
definição normal é FALSE.
A função GetAttr() também suporta o seguinte parâmetro:
TBIA_ContentsBox - Com este parâmetro, disponível a partir do VisualPrefs 41.35,
pode obter de uma imagem os dados sobre a posição e tamanho da
respectiva "caixa de conteúdo". Esta caixa designa a zona onde,
se for necessário, é possível adicionar novos componentes
gráficos. Em princípio só é preciso usar este parâmetro com
imagens TBFRAMEIMAGE. Para posicionar a caixa correctamente,
adicione os valores de deslocamento à esquerda e ao cimo aos da
própria imagem. De notar que, para obter melhores resultados, é
vivamente recomendável não seguir à risca as dimensões devolvidas
pelo parâmetro - deixe sempre um pequeno espaço (cerca de dois
píxeis) em redor dos gráficos da imagem.
A função só pode ser lida. O valor atribuído a este parâmetro
tem que ser um ponteiro para uma estrutura IBox. NUNCA lhe atribua
um ponteiro 'longword'!
Claro que se a função NewObject() falhar, deve providenciar uma imagem pré-definida
para os botões da sua barra de título. No entanto, editei uma versão Freeware de
imagens para a "tbiclass" (dev/gui/titlebar_ic.lha) que poderá incluir nas suas
aplicações. Esta classe providenciará as imagens necessárias que serão
automaticamente substituídas pelas do VisualPrefs se este estiver presente.
Por isso pode manter as suas imagens pré-definidas muito simples ;-)
Se usar o tipo TBFRAMEIMAGE para criar as suas próprias imagems para barras de
título, há duas formas de adicionar mais gráficos a cada imagem: ou introduz o
endereço dos seus gráficos no campo NextImage, ou divide a "tbiclass" em sub-classes
e redefine os métodos IM_DRAW/IM_DRAWFRAME (como é óbvio, neste caso é indispensável
deixar que a classe principal seja a primeira a desenhar os gráficos!).
É importante tomar nota de que todas as imagens da "tbiclasss" terão um valor
de -1 no lado esquerdo. Isto não deve ser modificado e deve colocar os seus
botões da barra de título em concordância. A razão para este (aparentemente
estranho) comportamento é que as imagens dos botões da barra de título do sistema
Intuition também funcionam deste modo e devemos tentar manter a compatibilidade
sempre que for possível.
Assim, ajuste o tamanho dos seus botões, se necessário, para os adaptar ao tamanho
das imagens devolvido pela classe.
Um exemplo de tudo isto pode ser:
...
/* Criar a imagem */
if (!(iconifyimage = NewObject(NULL,"tbiclass",SYSIA_Which,ICONIFYIMAGE,
SYSIA_DrawInfo,dri,
TAG_END)))
{
iconifyimage = builtin_iconifyimage;
}
/* Utilizar a imagem */
gad->GadgetRender = iconifyimage;
...
/* Libertar a imagem */
if (iconifyimage != builtin_iconifyimage) DisposeObject(iconifyimage);
...
É tudo. Por agora não tenho um verdadeiro ficheiro de exemplo, por isso,
para utilizar a "tbiclass" nas suas aplicações, por favor cole as poucas
linhas seguintes no início do seu código.
---- cortar por aqui ----8<---- cortar por aqui ----8<---- cortar por aqui ----
#define POPUPIMAGE (101)
#define MUIIMAGE (102)
#define SNAPSHOTIMAGE (103)
#define ICONIFYIMAGE (104)
#define PADLOCKIMAGE (105)
#define TBFRAMEIMAGE (106)
---- cortar por aqui ----8<---- cortar por aqui ----8<---- cortar por aqui ----
Existe já uma aplicação a usar a "tbiclass", o ViNCEd de Thomas Richter.
Espero que também suporte a "tbiclass" e contribua deste modo para dar uma
aparência consistente a todos os botões das barras de título usados nas
aplicações.
Obrigado,
Massimo Tantignone (tanti@intercom.it)